package com.bytecamp.testplatform.service.impl;

import com.bytecamp.testplatform.mapper.ApiInfoMapper;
import com.bytecamp.testplatform.model.ApiInfo;
import com.bytecamp.testplatform.service.ApiInfoService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 接口信息业务实现
 */
@Service
@RequiredArgsConstructor  // Lombok自动注入构造函数
public class ApiInfoServiceImpl implements ApiInfoService {

    private final ApiInfoMapper apiInfoMapper;  // 自动注入Mapper

    @Override
    public boolean saveApiInfo(ApiInfo apiInfo) {
        // 避免重复插入相同路径的接口
        ApiInfo existing = apiInfoMapper.selectByPath(apiInfo.getPath());
        if (existing != null) {
            return false;  // 已存在，返回失败
        }
        return apiInfoMapper.insert(apiInfo) > 0;
    }

    @Override
    public List<ApiInfo> getAllApis() {
        return apiInfoMapper.selectAll();
    }

    // 批量保存接口信息
    @Override
    public boolean batchSaveApiInfo(List<ApiInfo> apiInfoList) {
        if (apiInfoList.isEmpty()) {
            return true; // 空列表直接返回成功
        }

        // 1. 过滤已存在的接口（根据 path + method 唯一标识）
        List<ApiInfo> newApis = apiInfoList.stream()
                .filter(api -> {
                    // 检查数据库中是否已存在相同 path + method 的接口
                    ApiInfo existing = apiInfoMapper.selectByPathAndMethod(api.getPath(), api.getMethod());
                    return existing == null; // 只保留不存在的接口
                })
                .collect(Collectors.toList());

        if (newApis.isEmpty()) {
            return false; // 所有接口都已存在，返回失败
        }

        // 2. 批量插入新接口
        int insertCount = apiInfoMapper.batchInsert(newApis);
        return insertCount == newApis.size(); // 全部插入成功才返回 true
    }
}
